package com.example.websocketdemo.mongoConfig;

import com.example.websocketdemo.pojo.ServerMongodb;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * TODO   MongoDb 工具类
 *
 * @ClassName MongoTestDao
 * @Author xiaojiang
 * @Date 2021/9/28 上午 10:53
 */
@Component
public class MongoTestDao {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     *  TODO   根据指定的集合进行保存
     * @Param : aggregate    指定的集合
     * @Param : serverMongodb 保存的对象
     * @return void
     * @Author 江
     * @Date 2021/9/28 下午 12:27
     */
    public void insertManyTest(String aggregate,ServerMongodb serverMongodb) {

        mongoTemplate.insert(serverMongodb,aggregate);
    }

    /**
     *  TODO  使用默认集合保存数据
     * @Param : serverMongodb  保存的对象
     * @return void
     * @Author 江
     * @Date 2021/9/28 下午 12:27
     */
    public void saveTest(ServerMongodb serverMongodb) {

        mongoTemplate.save(serverMongodb);

    }

    /**
     *  TODO  根据传入的参数和集合进行查询
     * @Param : name     条件
     * @Param : aggregate  查询的集合（可以为空，若是默认的可以删除该参数）
     * @return ServerMongodb
     * @Author 江
     * @Date 2021/9/28 下午 12:45
     */
    public ServerMongodb findTest(Integer name, String aggregate) {
        Query query=new Query(Criteria.where("D1").is(name));
        ServerMongodb mgt =  mongoTemplate.findOne(query , ServerMongodb.class,aggregate);
        return mgt;
    }

    /**
     *  TODO  根据集合查询所有
     * @Param : aggregate  需要查询的集合
     * @return List<ServerMongodb>
     * @Author 江
     * @Date 2021/9/28 下午 12:43
     */
    public List<ServerMongodb> findTestAll(String aggregate) {
       
        List<ServerMongodb> all = mongoTemplate.findAll(ServerMongodb.class,aggregate);
        return all;
    }

    /**
     *  TODO  更新对象
     * @Param : test  更新的对象
     * @Param : aggregate  指定集合（可删除的那种）
     * @return void
     * @Author 江
     * @Date 2021/9/28 下午 12:52
     */
    public void updateTest(ServerMongodb test, String aggregate) {
        Query query=new Query(Criteria.where("D1").is(test.getD1()));
        Update update= new Update().set("D2", test.getD2()).set("D3", test.getD3());
        //更新查询返回结果集的第一条  updateFirst
        mongoTemplate.updateFirst(query,update,ServerMongodb.class,aggregate);
        //更新查询返回结果集的所有    updateMulti
//         mongoTemplate.updateMulti(query,update,ServerMongodb.class);
    }

    /**
     *  TODO  更新对象 所有符合条件的
     * @Param : test  更新的对象
     * @Param : aggregate  指定集合（可删除的那种）
     * @return void
     * @Author 江
     * @Date 2021/9/28 下午 12:52
     */
    public void updateTestAll(ServerMongodb test, String aggregate) {
        Query query=new Query(Criteria.where("D1").is(test.getD1()));
        Update update= new Update().set("D2", test.getD2()).set("D3", test.getD3());
        //更新查询返回结果集的第一条    updateFirst
//        mongoTemplate.updateFirst(query,update,ServerMongodb.class,aggregate);
        //更新查询返回结果集的所有     updateMulti
         mongoTemplate.updateMulti(query,update,ServerMongodb.class,aggregate);
    }

    /**
     * 删除符合条件的对象
     * @param id
     */
    public void deleteTestById(Integer id, String aggregate) {
        Query query=new Query(Criteria.where("D1").is(id));
        mongoTemplate.remove(query,ServerMongodb.class,aggregate);

    }

    public void deleteTestAll(String aggregate) {
        Query query=new Query();
        mongoTemplate.remove(query,aggregate);


    }

}
